/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MODELO;

import java.sql.*;
import javax.swing.DefaultComboBoxModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author CiberPulpo
 */
public class DAOEntidadEstablecimiento extends ManejadorBaseDatos implements IDAOPersistencia{

    public DAOEntidadEstablecimiento() throws Exception {
        super();
    }
    
    public DAOEntidadEstablecimiento(String driver, String servidor, String url, String usuarioBD, String passwordUsuarioBD, String nombreBD) throws Exception {
        super(driver, servidor, url, usuarioBD, passwordUsuarioBD, nombreBD);
    }
    
    public DefaultComboBoxModel getListaEstablecimientos_Salud(String cod_distrito,String cod_microred,int cod_fon,int cod_unidad_ejecutora,int cod_categoria_establec) {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_listar_user(?,?,?,?,?) ");
            proc.setString("cod_distrito", cod_distrito);
            proc.setString("cod_microred", cod_microred);
            proc.setInt("cod_fon", cod_fon);
            proc.setInt("cod_unidad_ejecutora", cod_unidad_ejecutora);
            proc.setInt("cod_categoria_establec", cod_categoria_establec);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                model.addElement(res.getString("nombre_Establec"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return model;
    }

    public DefaultComboBoxModel getListaEstablecimientos_Salud(int idUnidad_Ejec) {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_Listar_User2(?) ");
            proc.setInt("idUnidad_Ejecut", idUnidad_Ejec);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                model.addElement(res.getString("nombre_Establec"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return model;
    }
    
    public int getObtener_Cod_Establec(String nombre_Establecimiento){
        int cod=0;
        Connection conn = getConexion();
        try {
            
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_obtener_cod(?) ");
            proc.setString("nombre_Establecim", nombre_Establecimiento);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                cod= Integer.parseInt(res.getString("cod_RENAES"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        
        return cod;
    }
    
    public int getObtener_Total(String nom_establec){
        int cod=0;
        Connection conn = getConexion();
        try {
            
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_obtener_total(?) ");
            proc.setString("nom_establec", nom_establec);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                cod= Integer.parseInt(res.getString("total_EESS_deben_Reportar"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        
        return cod;
    }
    
    public int contar_establecimiento() {
        int rpta = 0;
        Connection conn = getConexion();
        try {
            ResultSet prueba;
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_contar() ");
            prueba = proc.executeQuery();
            while (prueba.next()) {
                rpta = Integer.parseInt(prueba.getString("Total"));
            }
        } catch (SQLException | NumberFormatException e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }
    
    public int contar_establecimiento(String cod_distrito,String cod_microred, int cod_fon, int cod_unidad_ejecutora, int cod_categoria_establec) {
        int rpta = 0;
        Connection conn = getConexion();
        try {
            ResultSet prueba;
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement pstm = this.getConexion().prepareCall("call establecimiento_contar_admin(?,?,?,?,?)");
            pstm.setString("cod_distrito",cod_distrito);
            pstm.setString("cod_microred",cod_microred);
            pstm.setInt("cod_fon", cod_fon);
            pstm.setInt("cod_unidad_ejecutora", cod_unidad_ejecutora);
            pstm.setInt("cod_categoria_establec", cod_categoria_establec);
            prueba = pstm.executeQuery();
            while (prueba.next()) {
                rpta = Integer.parseInt(prueba.getString("total"));
            }
        } catch (SQLException | NumberFormatException e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }
    
     public DefaultTableModel getTablaEstablecimiento_verUsusario() {
        DefaultTableModel tablemodel = new DefaultTableModel();
        String[] columNames = {"COD_RENAES","NUM_UBIGEO","ESTABLECIMIENTO","MICRORED/RED","UNIDAD EJECUTORA","FON","CATEGORIA DE ESTABLECIMIENTO","DEPARTAMENTO/PROVINCIA/DISTRITO"};
        //se crea una matriz con tantas filas y columnas que necesite
        Object[][] data = new String[contar_establecimiento()][8];
        try {
            conectar();
            //realizamos la consulta sql y llenamos los datos en la matriz "Object[][] data"
            CallableStatement pstm = this.getConexion().prepareCall("call Usuario_Ver_Establecimiento()");
            ResultSet res = pstm.executeQuery();
            int i = 0;
            while (res.next()) {
                data[i][0] = res.getString("cod_RENAES");
                data[i][1] = res.getString("num_Ubigeo");
                data[i][2] = res.getString("nombre_Establec");
                data[i][3] = res.getString("nombre");
                data[i][4] = res.getString("nombre");
                data[i][5] = res.getString("nombre_FON");
                data[i][6] = res.getString("nombre");
                data[i][7] = res.getString("nombre_lugar");
                i++;
            }
            //se añade la matriz de datos en el DefaultTableModel
            tablemodel.setDataVector(data, columNames);
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return tablemodel;
    }
     
     public DefaultTableModel getTablaEstablecimiento_admin() {
        DefaultTableModel tablemodel = new DefaultTableModel();
        String[] columNames = {"COD_RENAES","NUM_UBIGEO","ESTABLECIMIENTO","TOTAL_EESS_REPORTAR","ESTADO","MICRORED","UNIDAD EJECUTORA","FON","CAT.ESTABLEC","DISTRITO"};
        //se crea una matriz con tantas filas y columnas que necesite
        Object[][] data = new String[contar_establecimiento()][10];
        try {
            conectar();
            //realizamos la consulta sql y llenamos los datos en la matriz "Object[][] data"
            CallableStatement pstm = this.getConexion().prepareCall("call establecimiento_listar_admin()");
            ResultSet res = pstm.executeQuery();
            int i = 0;
            while (res.next()) {
                data[i][0] = res.getString("cod_RENAES");
                data[i][1] = res.getString("num_Ubigeo");
                data[i][2] = res.getString("nombre_Establec");
                data[i][3] = res.getString("total_EESS_deben_Reportar");
                data[i][4] = res.getString("estado");
                data[i][5] = res.getString("T_MicroRed_codigo");
                data[i][6] = res.getString("T_Unidad_Ejecutora_id_unidEjecut");
                data[i][7] = res.getString("T_FON_cod_FON");
                data[i][8] = res.getString("Categoria_Establec_id_Categ");
                data[i][9] = res.getString("T_Distrito_codigo");
                i++;
            }
            //se añade la matriz de datos en el DefaultTableModel
            tablemodel.setDataVector(data, columNames);
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return tablemodel;
    }

    @Override
    public int insertar(IEntidad objeto) throws Exception {
        int rpta = 0;
        EntidadEstablecimiento establec = (EntidadEstablecimiento) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_insertar(?,?,?,?,?,?,?,?,?,?)");
            //se cargan los parametros de entrada
            proc.setInt("pcod_RENAES", establec.getCod_RENAES());//Tipo int
            proc.setInt("pnum_Ubigeo", establec.getNum_Ubigeo());//Tipo int
            proc.setString("nombre", establec.getNombre_Establec());//Tipo String
            proc.setInt("total", establec.getTotal_EESS_deben_Reportar());//Tipo int
            proc.setString("pestado", establec.getEstado());//Tipo String
            proc.setString("cod_distrito", establec.getCodigo_distrito());//Tipo String
            proc.setString("cod_microred", establec.getCodigo_microred());//Tipo String
            proc.setInt("cod_fon", establec.getCod_FON());//Tipo int
            proc.setInt("cod_unidad_ejecutora", establec.getId_unidEjecut());//Tipo int
            proc.setInt("cod_categoria_establec", establec.getId_CategEstablec());//Tipo int
            try {
                proc.execute();
                rpta = 1;
            } catch (Exception ex) {
                rpta = 0;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }
    
    public int borrar(IEntidad objeto) throws Exception {
        int rpta = 0;
        EntidadEstablecimiento establec = (EntidadEstablecimiento) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_eliminar(?)");
            //se cargan los parametros de entrada
            proc.setInt("pcod_RENAES", establec.getCod_RENAES());//Tipo int
            try {
                proc.execute();
                rpta = 1;
            } catch (Exception ex) {
                rpta = 0;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }

    @Override
    public int modificar(IEntidad objeto) throws Exception {
        int rpta = 0;
        EntidadEstablecimiento establec = (EntidadEstablecimiento) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL establecimiento_actualizar(?,?,?,?,?,?,?,?,?,?)");
            //se cargan los parametros de entrada
            proc.setInt("pcod_RENAES", establec.getCod_RENAES());//Tipo int
            proc.setInt("pnum_Ubigeo", establec.getNum_Ubigeo());//Tipo int
            proc.setString("nombre", establec.getNombre_Establec());//Tipo String
            proc.setInt("total", establec.getTotal_EESS_deben_Reportar());//Tipo int
            proc.setString("pestado", establec.getEstado());//Tipo String
            proc.setString("cod_distrito", establec.getCodigo_distrito());//Tipo String
            proc.setString("cod_microred", establec.getCodigo_microred());//Tipo String
            proc.setInt("cod_fon", establec.getCod_FON());//Tipo int
            proc.setInt("cod_unidad_ejecutora", establec.getId_unidEjecut());//Tipo int
            proc.setInt("cod_categoria_establec", establec.getId_CategEstablec());//Tipo int
            try {
                proc.execute();
                rpta = 1;
            } catch (Exception ex) {
                rpta = 0;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }

    @Override
    public int borrar(String condicion) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}
